const puppeteer = require('puppeteer')

let login = async () => {
  const browser = await puppeteer.launch({
    headless: false,
    defaultViewport: null,
    args: ['--start-maximized'],
    ignoreDefaultArgs: ['--enable-automation'],
    devtools: false
  })
  const page = await browser.newPage()
  await page.goto('https://www.baidu.com/')
  // 登录功能
  await page.click('#u1 > a')
  // 等到登录弹框弹出之后再执行点击事件  waitFor(4000) / waitForSelector
  // await page.waitForTimeout(4000)
  await page.waitForSelector('#TANGRAM__PSP_11__footerULoginBtn')
  await page.click('#TANGRAM__PSP_11__footerULoginBtn')
  // 账号密码自动输入进行登录
  const USERNAME = await page.$('#TANGRAM__PSP_11__userName')
  await USERNAME.type('18621105520', {delay: 20})

  const PASSWORD = await page.$('#TANGRAM__PSP_11__password')
  await PASSWORD.type('baidu11.', {delay: 200})

  await page.click('#TANGRAM__PSP_11__submit', {delay: 1000})

  await page.waitForNavigation(); // 等到导航跳转之后

  // 自动获取我的关注
  await page.click('#s_menu_mine')
  // 等到元素生成之后获取数据
  /**
   * waitFor(selector or function or time)selector包括//img,表示等到img元素加载完毕
   * 这个方法是waitForSelector, waitForFunction, waitForXPath 的综合
   * waitForFunction表示当function返回为true的时候执行
   */
  // await page.waitForSelector('#s_xmancard_mine_new > div.s-mine-wrapper.clearfix > div.s-code-blocks.s-block-nav > div > div.s-mblock-content.s-opacity-blank3 > div')
  await page.waitFor(() => document.querySelector('#s_xmancard_mine_new > div.s-mine-wrapper.clearfix > div.s-code-blocks.s-block-nav > div > div.s-mblock-content.s-opacity-blank3 > div'))
  // 获取我的关注的内容
  /**
   * 获取单个我的关注的信息
   */
  // let url = await page.$eval('.c-span3.c-gap-left-large.nav-item', ele => ele.getAttribute('data-url'))
  // console.log(url);
  // return

  let content = await page.$$eval('.c-span3.c-gap-left-large.nav-item', eles => {
    return eles.map( ele => {
      return {
        url: ele.getAttribute('data-url'),
        title: ele.children[0].children[3].innerText
      }
    })
  })
  console.log(content);

  // 输入cookie的值=====百度登录之后重新刷新页面，如果不加下边一句，则evaluate输出是在登录的页面，登陆之后刷新页面则没有任何输出
  let cookie = await page.evaluate(() => {
    function getCookie(cookie_name) {
      let allcookies = document.cookie;
      console.log(allcookies);
      let cookie_pos = allcookies.indexOf(cookie_name);   //索引的长度

      // 如果找到了索引，就代表cookie存在，反之，就说明不存在。
      let value
      if (cookie_pos != -1) {
        // 把cookie_pos放在值的开始，只要给值加1即可。
        cookie_pos += cookie_name.length + 1;      //这里容易出问题，所以请大家参考的时候自己好好研究一下
        let cookie_end = allcookies.indexOf(";", cookie_pos);
        if (cookie_end == -1) cookie_end = allcookies.length;

        value = unescape(allcookies.substring(cookie_pos, cookie_end)); // cookie的值。。。
      }
      return value;
    }
    // 调用函数
    let  cookie_val = getCookie('BAIDUID');
    return cookie_val
  })
  console.log(cookie);
}
login()
